package com.dxf.chepter08

/**
 * 化简: 将二元函数引用于集合中的函数
 *
 *  reduceLeft    从左开始化简      |    reduceLeft 从右化简
 *  原理 递归:
 *    从左开始执行,将得到的结果返回给第一个参数,然后和下一个元素运行,将得到的结果继续返回给第一个参数
 *    即 (((1+2)+3)+4)+5
 *
 *
 *
 */
object T96_集合化简2 {


  def main(args: Array[String]): Unit = {


    val list = List(1, 2, 3, 4, 5)


    def minus(n1: Int, n2: Int): Int = {
      n1 - n2
    }


    println(list.reduceLeft(minus _)) //1-2-3-4-5 = -13
    println(list.reduceRight(minus _)) // 1-(2-(3-(4-5)))=3
    println(list.reduce(minus _)) // reduce 默认是  reduceLeft


    val list2 = List(3, 4,2, 7, 5)

    println(list2.reduce(minvalue _))

  }


  def minvalue(n1: Int, n2: Int): Int = {
    if (n1 - n2 > 0) n2 else n1
  }


}

